home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / font / CompositeGlyphMapper.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  2.5 KB  |  228 lines

  1. package sun.font;
  2.  
  3. public final class CompositeGlyphMapper extends CharToGlyphMapper {
  4.    public static final int SLOTMASK = -16777216;
  5.    public static final int GLYPHMASK = 16777215;
  6.    public static final int NBLOCKS = 216;
  7.    public static final int BLOCKSZ = 256;
  8.    public static final int MAXUNICODE = 55296;
  9.    CompositeFont font;
  10.    CharToGlyphMapper[] slotMappers;
  11.    int[][] glyphMaps;
  12.    private boolean hasExcludes;
  13.  
  14.    public CompositeGlyphMapper(CompositeFont var1) {
  15.       this.font = var1;
  16.       this.initMapper();
  17.       this.hasExcludes = var1.exclusionRanges != null && var1.maxIndices != null;
  18.    }
  19.  
  20.    public final int compositeGlyphCode(int var1, int var2) {
  21.       return var1 << 24 | var2 & 16777215;
  22.    }
  23.  
  24.    private final void initMapper() {
  25.       if (this.missingGlyph == -1) {
  26.          if (this.glyphMaps == null) {
  27.             this.glyphMaps = new int[216][];
  28.          }
  29.  
  30.          this.slotMappers = new CharToGlyphMapper[this.font.numSlots];
  31.          this.missingGlyph = this.font.getSlotFont(0).getMissingGlyphCode();
  32.          this.missingGlyph = this.compositeGlyphCode(0, this.missingGlyph);
  33.       }
  34.  
  35.    }
  36.  
  37.    private int getCachedGlyphCode(int var1) {
  38.       if (var1 >= 55296) {
  39.          return -1;
  40.       } else {
  41.          int[] var2;
  42.          return (var2 = this.glyphMaps[var1 >> 8]) == null ? -1 : var2[var1 & 255];
  43.       }
  44.    }
  45.  
  46.    private void setCachedGlyphCode(int var1, int var2) {
  47.       if (var1 < 55296) {
  48.          int var3 = var1 >> 8;
  49.          if (this.glyphMaps[var3] == null) {
  50.             this.glyphMaps[var3] = new int[256];
  51.  
  52.             for(int var4 = 0; var4 < 256; ++var4) {
  53.                this.glyphMaps[var3][var4] = -1;
  54.             }
  55.          }
  56.  
  57.          this.glyphMaps[var3][var1 & 255] = var2;
  58.       }
  59.    }
  60.  
  61.    private final CharToGlyphMapper getSlotMapper(int var1) {
  62.       CharToGlyphMapper var2 = this.slotMappers[var1];
  63.       if (var2 == null) {
  64.          var2 = this.font.getSlotFont(var1).getMapper();
  65.          this.slotMappers[var1] = var2;
  66.       }
  67.  
  68.       return var2;
  69.    }
  70.  
  71.    private final int convertToGlyph(int var1) {
  72.       for(int var2 = 0; var2 < this.font.numSlots; ++var2) {
  73.          if (!this.hasExcludes || !this.font.isExcludedChar(var2, var1)) {
  74.             CharToGlyphMapper var3 = this.getSlotMapper(var2);
  75.             int var4 = var3.charToGlyph(var1);
  76.             if (var4 != var3.getMissingGlyphCode()) {
  77.                var4 = this.compositeGlyphCode(var2, var4);
  78.                this.setCachedGlyphCode(var1, var4);
  79.                return var4;
  80.             }
  81.          }
  82.       }
  83.  
  84.       return this.missingGlyph;
  85.    }
  86.  
  87.    public int getNumGlyphs() {
  88.       int var1 = 0;
  89.  
  90.       for(int var2 = 0; var2 < 1; ++var2) {
  91.          CharToGlyphMapper var3 = this.slotMappers[var2];
  92.          if (var3 == null) {
  93.             var3 = this.font.getSlotFont(var2).getMapper();
  94.             this.slotMappers[var2] = var3;
  95.          }
  96.  
  97.          var1 += var3.getNumGlyphs();
  98.       }
  99.  
  100.       return var1;
  101.    }
  102.  
  103.    public int charToGlyph(int var1) {
  104.       int var2 = this.getCachedGlyphCode(var1);
  105.       if (var2 == -1) {
  106.          var2 = this.convertToGlyph(var1);
  107.       }
  108.  
  109.       return var2;
  110.    }
  111.  
  112.    public int charToGlyph(int var1, int var2) {
  113.       if (var2 >= 0) {
  114.          CharToGlyphMapper var3 = this.getSlotMapper(var2);
  115.          int var4 = var3.charToGlyph(var1);
  116.          if (var4 != var3.getMissingGlyphCode()) {
  117.             return this.compositeGlyphCode(var2, var4);
  118.          }
  119.       }
  120.  
  121.       return this.charToGlyph(var1);
  122.    }
  123.  
  124.    public int charToGlyph(char var1) {
  125.       int var2 = this.getCachedGlyphCode(var1);
  126.       if (var2 == -1) {
  127.          var2 = this.convertToGlyph(var1);
  128.       }
  129.  
  130.       return var2;
  131.    }
  132.  
  133.    public boolean charsToGlyphsNS(int var1, char[] var2, int[] var3) {
  134.       for(int var4 = 0; var4 < var1; ++var4) {
  135.          int var5 = var2[var4];
  136.          if (var5 >= 55296 && var5 <= 56319 && var4 < var1 - 1) {
  137.             char var6 = var2[var4 + 1];
  138.             if (var6 >= '\udc00' && var6 <= '\udfff') {
  139.                var5 = (var5 - '\ud800') * 1024 + var6 - '\udc00' + 65536;
  140.                var3[var4 + 1] = 65535;
  141.             }
  142.          }
  143.  
  144.          int var7 = var3[var4] = this.getCachedGlyphCode(var5);
  145.          if (var7 == -1) {
  146.             var3[var4] = this.convertToGlyph(var5);
  147.          }
  148.  
  149.          if (var5 >= 1424) {
  150.             if (var5 <= 1535) {
  151.                return true;
  152.             }
  153.  
  154.             if (var5 >= 1536 && var5 <= 1791) {
  155.                return true;
  156.             }
  157.  
  158.             if (var5 >= 2304 && var5 <= 3455) {
  159.                return true;
  160.             }
  161.  
  162.             if (var5 >= 3584 && var5 <= 3711) {
  163.                return true;
  164.             }
  165.  
  166.             if (var5 >= 6016 && var5 <= 6143) {
  167.                return true;
  168.             }
  169.  
  170.             if (var5 >= 8204 && var5 <= 8205) {
  171.                return true;
  172.             }
  173.  
  174.             if (var5 >= 8234 && var5 <= 8238) {
  175.                return true;
  176.             }
  177.  
  178.             if (var5 >= 8298 && var5 <= 8303) {
  179.                return true;
  180.             }
  181.  
  182.             if (var5 >= 65536) {
  183.                ++var4;
  184.             }
  185.          }
  186.       }
  187.  
  188.       return false;
  189.    }
  190.  
  191.    public void charsToGlyphs(int var1, char[] var2, int[] var3) {
  192.       for(int var4 = 0; var4 < var1; ++var4) {
  193.          int var5 = var2[var4];
  194.          if (var5 >= 55296 && var5 <= 56319 && var4 < var1 - 1) {
  195.             char var6 = var2[var4 + 1];
  196.             if (var6 >= '\udc00' && var6 <= '\udfff') {
  197.                var5 = (var5 - '\ud800') * 1024 + var6 - '\udc00' + 65536;
  198.                int var7 = var3[var4] = this.getCachedGlyphCode(var5);
  199.                if (var7 == -1) {
  200.                   var3[var4] = this.convertToGlyph(var5);
  201.                }
  202.  
  203.                ++var4;
  204.                var3[var4] = 65535;
  205.                continue;
  206.             }
  207.          }
  208.  
  209.          int var9 = var3[var4] = this.getCachedGlyphCode(var5);
  210.          if (var9 == -1) {
  211.             var3[var4] = this.convertToGlyph(var5);
  212.          }
  213.       }
  214.  
  215.    }
  216.  
  217.    public void charsToGlyphs(int var1, int[] var2, int[] var3) {
  218.       for(int var4 = 0; var4 < var1; ++var4) {
  219.          int var5 = var2[var4];
  220.          var3[var4] = this.getCachedGlyphCode(var5);
  221.          if (var3[var4] == -1) {
  222.             var3[var4] = this.convertToGlyph(var5);
  223.          }
  224.       }
  225.  
  226.    }
  227. }
  228.